package basic.test;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/7/30 13:21
 */
public class Singleton {

    // volatile修饰实例参数（防止指令重排）
    private static volatile Singleton singleton;

    // 私有的空参构造器
    private Singleton(){ }

    // 获取单例
    public static Singleton getInstance(){
        // 第一次判空
        if(singleton == null){
            // 上锁
            synchronized (Singleton.class) {
                // 第二次判空
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }

}
